package com.unity3d.recyclerview;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.scwang.smart.refresh.footer.ClassicsFooter;
import com.scwang.smart.refresh.header.ClassicsHeader;
import com.scwang.smart.refresh.layout.SmartRefreshLayout;
import com.scwang.smart.refresh.layout.api.RefreshLayout;
import com.scwang.smart.refresh.layout.listener.OnLoadMoreListener;
import com.scwang.smart.refresh.layout.listener.OnRefreshListener;

import java.util.ArrayList;
import java.util.List;

/*RecyclerView的使用
* 1.在Main.xml文件下创建RecyclerView组件
* 2.单独创建一个item.xml文件用于设置RecyclerView的单个模块的内容，注意设置该item.xml文件的布局高度
* 3.如何在Activity中获取到item.xml中的内容：创建一个内部类，用于获取RecyclerView中的组件
* 4.如何将获取到的控件内容复制n份
*       i)加载并返回布局文件   java->xml
*       ii)填充，修改布局里的控件内容
*       iii)将布局复制的次数，返回值为item显示的数量
* 5.如何控制列表空间的点击跳转：在4.ii)步中编写控件的跳转的代码
* 6.如何更新，加载列表控件中的数据：更新，填充数组中数据
*
* 高级篇：下拉加载更多，上拉刷新
* 1.导入第三方库SmartRefreshLayout
* 2.
* 3.
* */

public class MainActivity extends AppCompatActivity {

    //定义为全局变量
    RecyclerView recyclerView;
    MyAdapter myAdapter;
    //长度可变的数组<集合类>
    List<String>stringList=new ArrayList<>();

    SmartRefreshLayout smartRefreshLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //获取到recyclerView
        recyclerView = findViewById(R.id.reclcyerView1);

        myAdapter =new MyAdapter();
        /*填充布局文件*/
        recyclerView.setAdapter(myAdapter);
        /*设置布局文件的显示方式*/
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        /*设置横向滚动*/
//        recyclerView.setLayoutManager(new LinearLayoutManager(this,RecyclerView.HORIZONTAL,false));

        /*一行显示多个*/
//        recyclerView.setLayoutManager(new GridLayoutManager(this,2));

        stringList.add("Starry1");
        stringList.add("Starry2");
        stringList.add("Starry3");
        stringList.add("Starry4");
        stringList.add("Starry5");
        stringList.add("Starry6");

        /*给列表控件添加新的数据*/
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                stringList.add("new Starry1");
                stringList.add("new Starry2");
                stringList.add("new Starry3");
                stringList.add("new Starry4");
                stringList.add("new Starry5");
                stringList.add("new Starry6");
                /*重新刷新列表控件的数据*/
                myAdapter.notifyDataSetChanged();
            }
        });

        smartRefreshLayout=findViewById(R.id.refresh_parent);
        //头部刷新样式
        smartRefreshLayout.setRefreshHeader(new ClassicsHeader(this));
        //尾部刷新样式
        smartRefreshLayout.setRefreshFooter(new ClassicsFooter(this));

        //下拉刷新
        smartRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
                stringList.clear();
                stringList.add("下拉刷新 Starry1");
                stringList.add("下拉刷新 Starry2");
                stringList.add("下拉刷新 Starry3");
                stringList.add("下拉刷新 Starry4");
                stringList.add("下拉刷新 Starry5");
                stringList.add("下拉刷新 Starry6");
                /*重新刷新列表控件的数据*/
                myAdapter.notifyDataSetChanged();

                smartRefreshLayout.finishRefresh(1000);
            }
        });

        //上拉加载更多
        smartRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore(@NonNull RefreshLayout refreshLayout) {

                stringList.add("上拉更多 Starry1");
                stringList.add("上拉更多 Starry2");
                stringList.add("上拉更多 Starry3");
                stringList.add("上拉更多 Starry4");
                stringList.add("上拉更多 Starry5");
                stringList.add("上拉更多 Starry6");
                /*重新刷新列表控件的数据*/
                myAdapter.notifyDataSetChanged();

                smartRefreshLayout.finishLoadMore(1000);
            }
        });

    }

    /*泛型的使用，负责将布局文件复制n次*/
    public class MyAdapter extends RecyclerView.Adapter<MyViewHolder>{

        /*加载并返回布局文件   java->xml*/
        @NonNull
        @Override
        public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
           /*通过此方法获取xml文件
           * Context——》内部类中：外部类的类名.this
           *            不是在内部类中：this*/
            View view=LayoutInflater.from(MainActivity.this).inflate(R.layout.item_chat,parent,false);
            MyViewHolder myViewHolder=new MyViewHolder(view);
            return myViewHolder;
        }

        /*填充，修改布局里的控件内容*/
        /*1.可以将数据提前填充到一个数组中
        * 2.通过数组的下标获取到值，填充到控件中*/
        @Override
        public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
            holder.textView.setText(stringList.get(position));

            holder.itemView.setOnClickListener(
                    (view)->{
                        Intent intent = new Intent(MainActivity.this,MainActivity2.class);
                        startActivity(intent);
                    }

            );
        }

        /*将布局复制的次数，返回值为item显示的数量*/
        @Override
        public int getItemCount() {
            /*返回数组的值，不要写成固定常量*/
            return stringList.size();
        }
    }

    /*如何获取到item里的内容？？？
     *
     * 1. 在Activity中创建一个内部类*/
    /*创建一个内部类，用于获取RecyclerView中的组件*/
    public class MyViewHolder extends RecyclerView.ViewHolder{

        TextView textView;
        ConstraintLayout constraintLayout;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            /*并不是直接使用findViewById,而是通过调用itemView
            * 如果直接使用findViewById，默认是在MainActivity中查找*/
            textView = itemView.findViewById(R.id.textView);
            constraintLayout=itemView.findViewById(R.id.rootview);
        }
    }



}